package bo;

import java.rmi.RemoteException;
import java.util.Vector;
import run.PublisherImpl;

public class ListeTechniciens extends PublisherImpl{
        private static ListeTechniciens instance = null;
        private Vector<Technicien> _listeTechniciens;

	//*******************************************************************
	//Constructeurs
	//*******************************************************************
        private ListeTechniciens() throws RemoteException{
                this._listeTechniciens = new Vector<Technicien>();
        }  

        //*******************************************************************    
        //Constructeur du singleton    
        //******************************************************************* 

        public static ListeTechniciens getInstance() throws RemoteException{
                if(instance == null) 
                        instance = new ListeTechniciens();
                return instance;
        }    
            
	//*******************************************************************
	//Methodes
	//*******************************************************************        
        
        public synchronized Vector<Technicien> rechercherTechnicien(String nom, String prenom) throws RemoteException {
                if ((nom != null)||(prenom != null)){
                        Vector<Technicien> liste = new Vector<Technicien>();
                        for (int i = 0 ; i < this._listeTechniciens.size() ; i++){
                        Technicien technicien = this._listeTechniciens.get(i);
                            if ((technicien.getNom().compareTo(nom) == 0) && 
                                (technicien.getPrenom().compareTo(prenom) == 0)){
                            liste.add(technicien);
                            }
                        }
                return liste;
                }
                return null;
        }
    
        public synchronized Technicien rechercherEmploye(int matricule) throws RemoteException {
                if (matricule > 0){
                        for(int i = 0 ; i < this._listeTechniciens.size() ; i++){
                        Technicien technicien = (Technicien)this._listeTechniciens.get(i);
                        if (technicien.getMatricule() == matricule)
                                return technicien;
                        }
                }
                return null;
        }

        public synchronized int nombreDeTechnicien() throws RemoteException {
            return this._listeTechniciens.size();
        }
        
        public synchronized void remplirListeTechnicien(Vector<Technicien> tech) throws RemoteException {
            this._listeTechniciens = tech;
            this.notifyAllSubscibers();
        }
        
        public synchronized Vector<Technicien> getListeTechnicien() throws RemoteException {
            return this._listeTechniciens;
        }
        
        
        
	//*******************************************************************
	//Associations
	//*******************************************************************
        public synchronized boolean ajouterTechnicien(Technicien technicien) throws RemoteException{
                if (technicien == null) return false;
                if (instance.contientTechnicien(technicien)) return false;
                if (!instance.peutAjouterIntervention()) return false;
                instance._listeTechniciens.add(technicien);
                this.notifyAllSubscibers();
                return true;
        }
    
        public synchronized boolean supprimerIntervention(Technicien technicien) throws RemoteException{
                if(technicien==null)return false;
                if(!instance.contientTechnicien(technicien))return false;
                instance._listeTechniciens.remove(technicien);
                this.notifyAllSubscibers();
                return true;
        }
    
        public boolean peutAjouterIntervention(){
                return true;
        }
    
        public boolean contientTechnicien(Technicien technicien){
                return instance._listeTechniciens.contains(technicien);
        }
}